package com.example.demo.algorithm.delay_queue.redis_listener_queue;

import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;


/**
 * Redis 过期回调
 * Redis 的key过期回调事件，也能达到延迟队列的效果，简单来说我们开启监听key是否过期的事件，一旦key过期会触发一个callback事件。
 *
 * 修改redis.conf文件开启notify-keyspace-events Ex
 *
 * notify-keyspace-events Ex
 * Redis监听配置，注入Bean RedisMessageListenerContainer
 *
 *
 * 编写Redis过期回调监听方法，必须继承KeyExpirationEventMessageListener ，有点类似于MQ的消息监听。
 *
 *set xiaofu 123 ex 3
 * 在控制台成功监听到了这个过期的key。
 *
 * 监听到过期的key为：xiaofu
 */

@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
    public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }

    @Override
    public void onMessage(Message message, byte[] pattern) {
        String expiredKey = message.toString();
        System.out.println("监听到key：" + expiredKey + "已过期");
    }
}
